package com.shujia.scala

object Demo11List {
  def main(args: Array[String]): Unit = {

    /**
      * list  有序不唯一
      *
      */

    //不可变集合
    val list = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

    println(list.head) //第一个
    println(list.take(2)) //前n个
    println(list.last) //最后一个
    println(list.tail) //取出不包含第一个元素的所有元素

    println(list.sum) //求和
    println(list.max)
    println(list.min)

    println(list.reverse) //反转   会返回一个新的集合

    list.foreach(println) //遍历

    list.foreach(x => println(x))

    println(list.filter(i => i % 2 == 0)) // 返回一个新的集合

    println(list.drop(3)) //删除前面三个元素  返回一个新的集合


    println(list.map(i => i * 2)) //返回一个新的集合


    //Strin 底层是字符数组
    val str = "asdasdasdda"

    /**
      * foreach map  filter  在每一个可以被遍历的序列中都可以使用
      *
      */
    str.foreach(println)

    println("=" * 100)

    val list1 = List(2, 4, 1, 1, 4, 2, 6, 3, 12, 3, 5)


    /**
      * sortBy  排序方法 默认升序  需要指定排序字段
      *
      */
    println(list1.sortBy(i => i))
    println(list1.sortBy(i => -i))

    val persons = List(Per("张三", 22), Per("张三", 25), Per("张三", 21), Per("张三", 24))

    //通过年龄对数据金排序
    val sortData = persons.sortBy(per => -per.age)
    println(sortData)

    /** *
      * sortWith   指定一个排序的规则
      *
      */
    println(list1.sortWith((i, j) => i < j))
    println(list1.sortWith((i, j) => i > j))




    println(list1.mkString(",")) //和split功能相反   str.split(",")

    //调用方法的时候可以省略 . ()
    println(list1 mkString ",")

    println(list1.isEmpty)

    /**
      * 可变list
      * scala.collection.mutable.ListBuffer
      */

    //导入可变的list
    import scala.collection.mutable.ListBuffer

    val lb = new ListBuffer[String]

    //增加元素   从后面插入
    lb.+=("java")

    // +=  是一个方法
    lb += "shujia"

    println(lb)

    lb -= "java"

    println(lb)

    //批量插入
    lb ++= List("1", "b", "c")


    println(lb)

    //指定鞋标插入元素
    lb.insert(1, "spark")

    println(lb)

    val l = new ListBuffer[Int]

    //从前面插入
    l.+=:(1)
    l.+=:(2)
    l.+=:(3)

    println(l)

  }

  case class Per(name: String, age: Int)

}
